#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;

char s[1005];
char ps[1005];

char res[1005];

long long a[1005];

int main()
{
	while(1)
	{
		int  n, m, q;
		scanf("%d%d%d", &n, &m, &q);
		if(n == 0 && m == 0 && q == 0)
			break;
		memset(res, 0, sizeof(res));
		for(int i = 0; i < m; i++)
			a[i] = (1ll<<n)-1;
		for(int i = 0; i < m; i++)
			ps[i] = '0';
		for(int qq = 0; qq < q; qq++)
		{
			scanf("%s",s );
			long long msk = 0;
			for(int i = 0; i < n; i++)
			{
				if(s[i] == '1')
					msk |= (1ll<<i);
			}
			scanf("%s", s);
			for(int i = 0; i < m; i++)
			{
				if(ps[i] != s[i])
					a[i] &= msk;
				else
					a[i] &= ((1ll<<n)-1)^msk;
			}
			memcpy(ps, s, sizeof(s));
		}
		for(int i = 0; i < m; i++)
		{
			if((a[i] & (a[i]-1)) == 0)
			{
				for(int j = 0; j < n; j++)
				{
					if(a[i] & (1ll<<j))
					{
						if(j < 10)
							res[i] = '0' + j;
						else
							res[i] = 'A' + j - 10;
					}
				}
			}
			else
				res[i] = '?';
		}
		printf("%s\n", res);
	}

	return 0;
}
/*
3 10 3
000 0000000000
110 0000001111
101 1111111100
2 2 0
1 1 0
2 1 1
01 1
11 11 10
10000000000 10000000000
11000000000 01000000000
01100000000 00100000000
00110000000 00010000000
00011000000 00001000000
00001100000 00000100000
00000110000 00000010000
00000011000 00000001000
00000001100 00000000100
00000000110 00000000010
0 0 0
*/